package com.ctshk.rpc.system.service;

import com.ctshk.common.model.PageResponse;
import com.ctshk.rpc.system.dto.*;
import com.ctshk.rpc.system.req.MainDataQueryReq;
import com.ctshk.rpc.system.req.MainDataRowFieldDataReq;
import com.ctshk.rpc.system.req.MainDataTableQueryReq;
import com.ctshk.rpc.system.req.MainDataTableReq;

import java.util.List;

/**
 * <p>
 * 基础数据模板表 服务类
 * </p>
 *
 * @author 谢诗宏
 * @since 2020-12-29
 */
public interface IMainDataTableService {

    /**
     * 新增主数据名称
     * @param mainDataTableReq 主数据名称
     * @param usrId 用户id
     */
    void add(MainDataTableReq mainDataTableReq, Long usrId);

    /**
     * 查询主数据表名称列表
     * @param mainDataTableQueryReq 查询条件
     * @param userId 用户id
     * @return 列表数据
     */
    PageResponse<MainDataTableDTO> queryList(MainDataTableQueryReq mainDataTableQueryReq, Long userId);

    /**
     * 查询主数据名称下列表值（row+field组合）
     * @param mainDataQueryReq 主数据表名称id
     * @return 主数据名称下列表值
     */
    PageResponse<MainDataRowDataDTO> queryTable(MainDataQueryReq mainDataQueryReq);

    /**
     * 查询主数据名称下列表值（code+name组合）
     * @param mainDataQueryReq 主数据表名称id
     * @return 主数据名称下列表值
     */

    PageResponse<MainDataRowDataListDTO> queryTableList(MainDataQueryReq mainDataQueryReq);

    /**
     *  查询表名称下字段属性
     * @param id id
     * @return 表名称和字段属性
     */
    MainDataTableDTO getTable(Long id);

    /**
     * 禁用启用接口
     * @param id 数据id
     * @param userId 用户id
     */
    void updateStatus(Long id, Long userId);

    /**
     * 删除接口
     * @param id 数据id
     * @param userId 用户id
     */
    void deleteTable(Long id, Long userId);

    /**
     *  查询所有表名称（所属模块区分）
     * @return 所有表名称列表
     */
    List<MainDataModuleDTO> queryModuleList();

    /**
     * 修改数据表名称
     * @param mainDataTableReq 数据表
     * @param userId 用户id
     */
    void updateTable(MainDataTableReq mainDataTableReq, Long userId);

    /**
     * 内部接口，查询主数接口
     * @param id 表名称id
     * @return 主数据列表
     */
    List<MainDataRowDTO> queryData(Long id);

    /**
     * 内部接口，根据行id和字段id查询值
     * @param rid 行id rowId
     * @param did 字段数据值id fieldDataId
     * @return 列表
     */
    List<MainDataRowFieldDataDTO> queryDataField(Long rid, Long did);

    List<MainDataRowFieldDataDTO> queryDataFieldLikeName(MainDataRowFieldDataReq req);

    /**
     *  内部接口，根据表id和字段id 去除重复值
     * @param tid 表id
     * @param fid 字段id
     * @return 列表
     */
    List<MainDataRowFieldDataDTO> groupByDataField(Long tid, Long fid);


}
